맨위로가기 타임라인 바로가기

장치 드라이버

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
타임라인 바로가기

1. 개요

장치 드라이버는 응용 프로그램과 운영 체제가 하드웨어 장치를 제어할 수 있도록 돕는 소프트웨어 구성 요소이다. 이는 하드웨어 장치와 운영 체제 간의 번역기 역할을 하며, 프로그래머가 특정 하드웨어에 의존하지 않고 상위 수준의 코드를 작성할 수 있게 한다. 장치 드라이버는 논리 계층과 물리 계층으로 나뉘며, OS별로 내부 구조가 다르다. 장치 드라이버는 개발 시 하드웨어와 소프트웨어에 대한 깊은 이해가 필요하며, 최근에는 오픈 소스 드라이버 개발도 이루어지고 있다. 운영 체제에 따라 장치 드라이버는 다양한 권한 수준에서 실행될 수 있으며, 가상화 환경에서 사용되는 가상 장치 드라이버도 존재한다. 장치 드라이버는 다양한 하드웨어 장치와 인터페이스하며, 보안 취약점의 대상이 될 수 있다. 윈도우, 리눅스, macOS 등 다양한 운영 체제에서 각기 다른 장치 드라이버 모델과 API를 지원한다.

더 읽어볼만한 페이지

  • 윈도우 NT 커널 - 커널 트랜잭션 관리자
    커널 트랜잭션 관리자(KTM)는 커널 모드에서 작동하며, 커널 및 사용자 모드 리소스와 분산 리소스 간의 데이터베이스 트랜잭션을 지원하여 시스템 안정성 향상과 데이터 무결성 보장에 기여한다.
  • 윈도우 NT 커널 - 프로세서 제어 영역
    프로세서 제어 영역(PCR)은 윈도우 운영체제에서 KPCR로 알려진 자료 구조로, 현재 프로세서에 대한 정보와 프로세서 상태 정보, 실행 중인 스레드 포인터 등을 포함하는 KPRCB를 담고 있다.
  • 장치 드라이버 - 윈도우 디스플레이 드라이버 모델
    윈도우 비스타부터 도입된 윈도우 디스플레이 드라이버 모델(WDDM)은 성능 향상, 안정성, 새로운 기술 지원을 목표로 개발된 디스플레이 드라이버 아키텍처로, 가상화된 비디오 메모리, GPU 스케줄링, 프로세스 간 Direct3D 표면 공유, 향상된 오류 허용성 등의 특징을 가지며 데스크톱 윈도우 관리자(DWM)를 통한 합성 데스크톱 환경 구현에 필수적이다.
  • 장치 드라이버 - HPLIP
    HPLIP는 HP에서 제공하는 리눅스용 프린터 및 스캐너 드라이버이자 툴 모음으로, GUI 환경 설정 및 명령줄 유틸리티를 통해 장치 구성, 인쇄, 스캔, 팩스 등의 작업을 지원하며, 자동 설치 프로그램과 hpiod 프로세스와 연동되어 작동한다.
  • 운영체제 기술 - 프로세스
    프로세스는 컴퓨터에서 실행되는 프로그램의 인스턴스로, 운영 체제가 시스템 자원을 효율적으로 관리하며 멀티태스킹 환경에서 독립적인 실행 흐름을 유지한다.
  • 운영체제 기술 - 커널 (컴퓨팅)
    커널은 운영 체제의 핵심으로, 하드웨어와 소프트웨어 간 상호 작용을 관리하며 시스템 보안, 자원 관리, 하드웨어 추상화, 프로세스 스케줄링, 프로세스 간 통신, 다중 작업 환경 지원 등의 기능을 제공하고, 모놀리식, 마이크로, 혼합형 커널 등으로 구현되며 가상화 및 클라우드 컴퓨팅 환경에서 중요성이 커지고 있다.
장치 드라이버
일반 정보
종류장치 드라이버
다른 이름장치 구동기, 장치 구동 프로그램
설명컴퓨터의 운영 체제가 특정 하드웨어 장치와 상호 작용할 수 있도록 하는 컴퓨터 프로그램
상세 정보
기능하드웨어에 대한 소프트웨어 인터페이스 제공
운영 체제가 하드웨어 기능을 사용하도록 허용
필요성운영 체제가 다양한 하드웨어 장치를 지원하기 위해 필요
개발장치 제조업체 또는 운영 체제 공급업체에서 개발
작동 원리운영 체제와 하드웨어 간의 통신 프로토콜 번역
장치 특정 명령을 운영 체제가 이해할 수 있는 명령으로 변환
예시프린터 드라이버
그래픽 카드 드라이버
사운드 카드 드라이버
네트워크 카드 드라이버
사용자 모드 vs 커널 모드사용자 모드 드라이버: 사용자 공간에서 실행, 시스템 충돌 위험 감소
커널 모드 드라이버: 커널 공간에서 실행, 하드웨어에 직접 액세스 가능, 시스템 안정성 중요
장점하드웨어 추상화 제공: 응용 프로그램이 하드웨어 세부 사항을 알 필요 없이 장치와 상호 작용 가능
하드웨어 기능 확장: 새로운 하드웨어 기능 지원 가능
단점드라이버 오류: 시스템 불안정 또는 충돌 발생 가능
드라이버 업데이트 필요: 새로운 운영 체제 또는 하드웨어와의 호환성 유지 필요
플랫폼별 고려 사항
윈도우드라이버 모델: WDM, KMDF, UMDF 등
드라이버 서명 요구
리눅스커널 모듈 형태로 제공
오픈 소스 드라이버 개발 활발
macOSI/O Kit 프레임워크 사용
커널 익스텐션 (kext) 사용

2. 목적

장치 드라이버는 장치와 응용 프로그램·운영 체제 사이의 해석기 역할을 하며 프로그래밍을 단순하게 한다.[1] 높은 수준의 코드는 코드가 제어하는 하드웨어 장치를 독립적으로 제어할 수 있도록 해준다. 예를 들어 프린터와 같은 장치는 버전에 따라 고유의 특별한 명령어들을 요구한다. 반면, 파일을 프린터로 보내는 것과 같은, 대부분의 응용 프로그램들은 PRINTLN과 같은 높은 수준의 포괄적인 명령어들을 사용하여 장치에 접근한다. 드라이버는 이러한 포괄적인 명령어들을 받아들이고, 이 명령어들을 장치가 요구하는 낮은 수준의 명령어들로 변환한다.

장치 드라이버의 주요 목적은 하드웨어 장치와 이를 사용하는 애플리케이션 또는 운영 체제 간의 번역기 역할을 함으로써 추상화를 제공하는 것이다.[1] 이를 통해 프로그래머는 최종 사용자가 어떤 특정 하드웨어를 사용하든 관계없이 상위 수준의 애플리케이션 코드를 작성할 수 있다.

예를 들어, 시리얼 포트와 상호 작용하는 상위 수준의 애플리케이션은 "데이터 보내기" 및 "데이터 수신"의 두 가지 기능을 가질 수 있다. 하위 수준에서 이러한 기능을 구현하는 장치 드라이버는 사용자의 컴퓨터에 설치된 특정 시리얼 포트 컨트롤러와 통신한다. 16550 UART를 제어하는 데 필요한 명령어는 FTDI 시리얼 포트 변환기를 제어하는 데 필요한 명령어와 매우 다르지만, 각 하드웨어별 장치 드라이버는 이러한 세부 정보를 동일하거나 유사한 소프트웨어 인터페이스로 추상화한다.

워드 프로세서스프레드시트 등의 응용 프로그램이 모니터, 프린터, 네트워크 카드 등의 장치를 이용할 때, 운영 체제(OS)가 제공하는 공통화된 API (응용 프로그램 인터페이스)를 통해 장치의 기능을 이용할 수 있게 해 둔다. 그리고 추상화된 API와 하드웨어 간의 대응을 각 하드웨어용 장치 드라이버가 담당한다.

이러한 방식을 채택함으로써 결과적으로 하드웨어의 차이를 흡수할 수 있다. 즉, 소프트웨어 프로그래머는 특정 하드웨어에 대응하는 세세한 소프트웨어를 작성하지 않아도 API에 맞춘 응용 프로그램을 만듦으로써, 작성한 소프트웨어에서 불특정 다수의 하드웨어를 이용할 수 있다.

3. 설계

장치 드라이버는 일반적으로 논리 계층과 물리 계층으로 나뉜다. 논리 계층은 직렬 포트나 디스크 드라이브와 같은 장치 클래스를 위한 데이터 처리를 담당한다. 예를 들어, 시리얼 포트는 모든 시리얼 포트 하드웨어에 공통으로 쓰이는 XON/XOFF와 같은 표준 통신 프로토콜을 다루는데, 직렬 포트 논리 계층이 이것을 관리한다. 물리 계층은 특정 장치 인스턴스(예: 특정 시리얼 포트 칩)와 통신한다. 16550 UART 하드웨어는 PL-011과 다르며, 물리 계층은 이러한 칩의 특정한 차이를 처리한다. 운영 체제의 요청은 먼저 논리 계층으로 이동하고, 논리 계층은 물리 계층을 호출하여 하드웨어가 이해할 수 있는 용어로 운영 체제의 요청을 실행한다. 반대로, 하드웨어 장치가 운영 체제에 응답해야 할 때는 물리 계층이 먼저 대응하여 논리 계층을 호출한다.[3]

리눅스 장치 드라이버는 운영 체제 커널 안에 만들어지거나, 불러 올 수 있는 모듈(.ko 파일)로 따로 만들어질 수 있다. 마이크로소프트 윈도우의 .sys 파일은 불러올 수 있는 장치 드라이버의 예시이다. 불러올 수 있는 장치 드라이버는 필요할 때만 불러오고, 사용하지 않을 때는 언로드할 수 있으므로 커널 메모리를 절약할 수 있다.[3]

4. 개발

장치 드라이버를 개발하려면 하드웨어와 소프트웨어에 대한 깊이 있는 이해가 필요하다. 일반적으로 하드웨어를 개발하는 회사의 소프트웨어 엔지니어들이 장치 드라이버를 작성하는데, 이는 그들이 하드웨어 설계에 대해 더 잘 알고 있기 때문이다.[3] 하드웨어 제조업체는 고객이 하드웨어를 최적으로 사용할 수 있도록 지원하는 데 관심을 두었다.

최근에는 자유-오픈 소스 운영 체제를 위한 비공식 장치 드라이버 개발도 활발하다. 이 경우, 하드웨어 제공업체가 장치 통신 정보를 제공하는 것이 중요하며, 리버스 엔지니어링을 통해 이러한 정보를 얻을 수도 있지만 하드웨어에서는 소프트웨어보다 훨씬 어렵다.

마이크로소프트는 잘못 작성된 장치 드라이버로 인한 시스템 불안정 문제를 줄이기 위해 윈도우 드라이버 파운데이션(WDF)이라는 새로운 드라이버 개발 프레임워크를 만들었다. 여기에는 특정 유형의 드라이버(주로 메시지 기반 프로토콜을 사용하여 장치와 통신하는 드라이버)를 사용자 모드 드라이버로 개발하도록 권장하는 사용자 모드 드라이버 프레임워크(UMDF)가 포함된다. 이러한 드라이버에 오류가 발생하더라도 시스템은 불안정해지지 않는다. 커널 모드 드라이버 프레임워크(KMDF) 모델은 커널 모드 장치 드라이버 개발을 계속 허용하지만, 입출력 기능, 전원 관리, 플러그 앤 플레이 장치 지원 취소 등 문제를 일으키는 것으로 알려진 기능들을 표준으로 제공하려고 한다.

애플(Apple Inc.)은 macOS에서 드라이버 개발을 위한 오픈 소스 프레임워크인 입출력 키트를 제공한다.

리눅스 커널 환경에서 프로그래머는 장치 드라이버를 커널의 일부, 로드 가능한 모듈, 또는 사용자 모드 드라이버(USB 장치와 같이 커널 인터페이스가 있는 특정 유형의 장치)로 빌드할 수 있다.[4]

5. 권한 수준

운영 체제에 따라 장치 드라이버는 다양한 권한 수준에서 실행될 수 있다. 드라이버가 어떤 권한 수준에 있는지는 운영 체제가 사용하는 커널의 유형에 따라 크게 결정된다. 리눅스 커널과 같은 모놀리식 커널을 사용하는 운영 체제는 일반적으로 다른 모든 커널 객체와 동일한 권한으로 장치 드라이버를 실행한다. 반대로, Minix와 같은 마이크로커널을 기반으로 설계된 시스템은 드라이버를 커널과 독립적인 프로세스로 배치하지만, 필수적인 입출력 기능을 위해 사용하고 사용자 프로그램 간에 메시지를 전달한다.[5]

하이브리드 커널을 사용하는 시스템인 Windows NT에서는 장치 드라이버가 커널 모드 또는 사용자 모드에서 실행되는 것이 일반적이다.[6]

메모리를 다양한 권한 레벨로 분리하는 가장 일반적인 메커니즘은 보호 링을 사용하는 것이다. x86 및 ARM 프로세서를 사용하는 시스템과 같이 링 간 전환은 성능 저하를 유발하며, 이는 네트워크 인터페이스 카드와 같이 낮은 지연 시간으로 실행하는 것이 선호되는 장치에 대한 드라이버를 만들 때 운영 체제 개발자와 임베디드 소프트웨어 엔지니어가 고려하는 요소이다. 사용자 모드에서 드라이버를 실행하는 주요 장점은 향상된 안정성으로, 잘못 작성된 사용자 모드 장치 드라이버는 커널 메모리를 덮어쓰는 방식으로 시스템을 중단시킬 수 없다.[7]

Windows에서 장치 드라이버는 커널 모드(x86 CPU의 링0) 또는 사용자 모드(x86 CPU의 링3)에서 동작한다.[38] 드라이버를 사용자 모드에서 동작시키는 가장 큰 장점은 안정성이 향상되는 것이다. 사용자 모드의 장치 드라이버는 품질이 좋지 않더라도 커널 메모리를 덮어써서 시스템을 망가뜨리는 일이 없다.[39] 한편, 커널 모드에서 사용자 모드로 이행하면 성능이 저하되므로, 성능이 요구되는 장치 드라이버는 사용자 모드로 이행할 수 없다.

사용자 모드의 모듈은 시스템 콜을 사용하지 않으면 커널 공간에 접근할 수 없다.

6. 응용 프로그램

장치 드라이버는 다양한 하드웨어 장치와 인터페이스하며, 컴퓨터 시스템 구성에 있어 매우 중요하다. 사용자는 올바른 장치 드라이버를 선택하고 설치해야 한다. 장치 드라이버는 다음과 같은 다양한 장치들과 인터페이스 할 수 있다.

장치 종류
프린터
비디오 어댑터
네트워크 카드
사운드 카드
PC 칩셋
다양한 종류의 로컬 버스 (특히, 현대 시스템에서의 버스 마스터링)
다양한 종류의 낮은 대역폭 입출력 버스 (예: 마우스, 키보드 등의 포인팅 장치용)
하드 디스크, CD-ROM, 플로피 디스크 버스(ATA, SATA, SCSI, SAS)와 같은 컴퓨터 저장 장치
서로 다른 파일 시스템 지원 구현
이미지 스캐너
디지털 카메라
디지털 지상파 텔레비전 튜너
홈 오토메이션에서 단거리 및 저속 무선 통신에 사용되는 무선 근거리 통신망용 무선 주파수 통신 송수신기 어댑터(예: 블루투스 로우 에너지(BLE), 스레드, 지그비, Z-Wave)
IrDA 어댑터



일반적으로 다음과 같은 추상화 수준을 가진다.


  • 하드웨어의 경우:
  • * 직접 인터페이스
  • * 장치 제어 레지스터에 쓰거나 읽기
  • * 일부 상위 수준 인터페이스 사용(예: 비디오 BIOS)
  • * 다른 하위 수준 장치 드라이버 사용(예: 디스크 드라이버를 사용하는 파일 시스템 드라이버)
  • * 완전히 다른 작업을 하면서 하드웨어로 작업 시뮬레이션[9]
  • 소프트웨어의 경우:
  • * 운영 체제가 하드웨어 리소스에 직접 액세스하도록 허용
  • * 프리미티브만 구현
  • * 비 드라이버 소프트웨어용 인터페이스 구현(예: TWAIN)
  • * 때로는 매우 높은 수준의 언어 구현(예: PostScript)


장치 드라이버는 하드웨어 장치와 이를 사용하는 응용 프로그램 또는 운영 체제 간의 번역기 역할을 하여 추상화를 제공한다.[1] 프로그래머는 특정 하드웨어를 고려하지 않고 상위 수준의 코드를 작성할 수 있다. 예를 들어, 시리얼 포트와 상호 작용하는 응용 프로그램은 "데이터 보내기" 및 "데이터 수신"과 같은 기능을 사용하며, 장치 드라이버는 이러한 기능을 특정 시리얼 포트 컨트롤러에 맞는 명령어로 변환한다. 16550 UART영어를 제어하는 명령어와 FTDI영어 시리얼 포트 변환기를 제어하는 명령어는 매우 다르지만, 각 하드웨어별 장치 드라이버는 이러한 세부 정보를 동일하거나 유사한 소프트웨어 인터페이스로 추상화한다.

7. 가상 장치 드라이버

가상 장치 드라이버는 마이크로소프트 윈도우가 설치된 컴퓨터에서 MS-DOS 프로그램을 실행하거나, 젠 호스트와 같이 게스트 운영 체제를 실행하는 것과 같은 가상화 환경에서 쓰이는 특별한 장치 드라이버이다. 가상 장치 드라이버는 하드웨어의 일부를 가상으로 구현(emulate)하여, 가상 머신 안에서 실행되는 게스트 운영 체제와 시스템 드라이버들이 실제 하드웨어를 받아들인 것 같은 착각을 일으킨다. 게스트 운영 체제가 하드웨어를 받아들이려는 시도는 기능 요청을 위해 호스트 운영 체제의 가상 장치 드라이버로 전달된다. 가상 장치 드라이버는 가상 머신으로 인터럽트와 같은, 시뮬레이션된 프로세서 수준의 이벤트를 보낼 수 있다.

가상 장치는 비가상화 환경에서도 작동할 수 있다. 예를 들어, 가상 네트워크 어댑터는 가상 사설망과 함께 사용되는 반면, 가상 디스크 장치는 iSCSI와 함께 사용된다. 가상 장치 드라이버의 좋은 예로는 데몬 툴스가 있다.

8. 오픈 소스 드라이버

오픈 소스 드라이버는 하드웨어의 아키텍처와 사양이 공개되지 않으면 제작이 어렵기 때문에, 폐쇄 소스 버전의 드라이버에 비해 개발이 활발하지 않거나 기능 및 성능이 떨어지는 경우가 많다.[40] 하지만 커뮤니티 주도의 개발을 통해 다양한 하드웨어를 지원하고 기술 접근성을 높이는 데 기여한다. 주요 오픈 소스 드라이버는 다음과 같다.


  • 프린터: CUPS
  • RAID: CCISS[11]
  • 스캐너: SANE
  • 비디오: Vidix, Direct Rendering Infrastructure
  • 그래픽 장치 드라이버
  • 리눅스용 AMD 라데온 그래픽 드라이버[41]
  • 리눅스인텔 그래픽 드라이버[42]
  • 리눅스용 NVIDIA 그래픽 드라이버 nouveau

9. API와의 관계

드라이버는 운영 체제의 일부로 기능한다. 사용자 모드의 프로세스에서 API 호출을 하면 드라이버 코드가 호출되지만, 드라이버 코드 자체는 사용자 프로세스가 아닌 커널 코드의 일부로 동작한다.

현대의 운영 체제에서 추상화된 API는 일반적으로 "열기(open), 읽기(read), 쓰기(write), IOCTL, 닫기(close)"를 처리하는 API로 통합되어 있다.[1]


  • 열기(open): 장치와 입출력을 준비한다.
  • 읽기(read): 장치로부터 데이터를 받는다.
  • 쓰기(write): 장치에 데이터를 보낸다.
  • IOCTL(ioctl): 장치에 특별한 처리를 한다.
  • 닫기(close): 입출력을 마친다.


이러한 API는 역사적으로 기억 장치 안에 있는 파일에 접근하기 위한 API였지만, 장치에도 접근할 수 있도록 확장된 형태로 제공되는 것이 일반적이다.

장치마다 읽기(read)와 쓰기(write)의 역할은 다르다. 예를 들어 프린터에 '쓰기'를 실행하면 인쇄되지만, 사운드 카드에 '쓰기'를 실행하면 소리가 난다. 마우스에 대해 '읽기'를 실행하면 마우스가 이동한 위치 등을 읽을 수 있다. 그러나 프린터에 대해 '읽기'를 실시하면, 보통 아무 일도 일어나지 않는다.[33] 장치 드라이버는 하드웨어 장치와 이를 사용하는 애플리케이션 또는 운영 체제 간의 번역기 역할을 함으로써 추상화를 제공한다.[1]

10. 내부 구성

장치 드라이버는 보통 API 호출을 처리하는 디스패치 코드와 인터럽트를 처리하는 코드로 구성된다. 인터럽트 처리는 빠른 응답을 위해 순수 인터럽트 루틴과 나중에 처리하는 코드로 나누어 구현하기도 한다. 순수 인터럽트 루틴은 빠르게 복귀해야 하고(그래야 다른 인터럽트를 받을 수 있다), 시간이 오래 걸리는 작업은 나중에 처리한다. (나중에 처리하는 코드는 Windows에서는 DPC(Deferred Procedure Call), Linux에서는 softirq 또는 Tasklet이라고 부른다. 예전 Linux에서는 Bottom Half라고 했다.)

운영 체제(OS)는 비슷한 기능을 가진 하드웨어를 묶어 '''장치 클래스'''로 다루기도 한다. 이 경우 드라이버는 계층 구조를 이루는데, OS가 특정 장치 클래스에 공통되는 '''클래스 드라이버'''()를 제공하고, 각 장치 제조사가 장치별 '''미니 드라이버'''()를 만든다.[34] 이렇게 하면 드라이버 개발 부담을 줄일 수 있다. 상위/하위 드라이버는 포트 드라이버/미니 포트 드라이버, 클래스 드라이버/미니 클래스 드라이버 등으로 불리기도 한다.[35]

예를 들어, 시리얼 포트는 와 같이 공통 표준 통신 프로토콜을 지원해야 한다. 이는 시리얼 포트의 논리 계층(클래스 드라이버)에서 처리한다. 물리 계층(미니 드라이버)은 특정 시리얼 포트 칩과 통신한다. 16550 UART 하드웨어는 PL011[36]과 다르므로, 물리 계층에서 이러한 차이를 처리한다. OS 요청은 먼저 논리 계층으로 가고, 논리 계층은 물리 계층을 호출하여 요청을 하드웨어가 이해하는 형태로 실행한다. 반대로 하드웨어가 OS에 응답할 때는 물리 계층이 먼저 처리하고 논리 계층을 호출한다.

장치 드라이버를 클래스별로 만들면 특정 하드웨어의 고유 기능을 사용하기 어렵거나 불가능해지는 단점도 있다. 새로운 기술이 적용된 하드웨어는 OS가 그 기능을 어떻게 추상화할지(클래스화할지) 결정될 때까지 미니 드라이버 개발이 늦어지기도 한다. 이럴 때는 하드웨어별로 계층화되지 않은 드라이버('''모놀리식 드라이버''')를 만들면 빠르게 드라이버를 제공할 수 있다.

모놀리식 드라이버는 ioctl을 통해 하드웨어 고유 기능을 사용하게 할 수 있고, 전용 애플리케이션을 만들어 더 세밀하게 하드웨어를 제어할 수도 있다.

OS마다 장치 드라이버 내부 구조는 많이 다르다.

Windows는 Windows 98부터 여러 Windows 버전에서 드라이버를 쉽게 만들 수 있도록 WDM ('''WDM''') 구조를 도입했다. Windows는 드라이버 최하위에 하드웨어 추상화 계층('''HAL''')을 두어 플랫폼 차이(CPU 종류, CPU 아키텍처 발전 등)를 흡수한다.

리눅스는 장치 드라이버를 리눅스 커널의 일부 또는 별도 모듈로 만들 수 있다. Makedev에는 ttyS(터미널), lp(병렬 포트), hd(디스크), loop(), sound(, 시퀀서, dsp, audio) 등 리눅스 주변 기기 목록이 있다.[37]

Windows는 ".sys", Linux는 ".ko" 확장자 파일을 로드 가능한 장치 드라이버로 사용한다. 이런 드라이버는 필요할 때만 로드하여 커널 메모리를 절약할 수 있다.

11. 보안

컴퓨터는 운영 체제(OS) 커널에서 다양하고 맞춤화된 많은 장치 드라이버를 실행하며, 이는 종종 다양한 컴퓨터 버그 및 취약점 (컴퓨팅)을 포함하여 익스플로잇 (컴퓨터 보안)의 대상이 된다.[17] BYOVD(Bring Your Own Vulnerable Driver)는 해커가 커널에 악성 코드를 삽입할 수 있는 결함이 있는 서명된 구형 드라이버를 사용하는 방식이다.[18]

취약할 수 있는 드라이버에는 WiFi 및 Bluetooth,[19][20] 게임/그래픽 드라이버,[21] 및 프린터 드라이버가 포함된다.[22]

효과적인 커널 취약점 탐지 도구가 부족하며, 특히 장치 드라이버의 소스 코드가 대부분 공개되지 않고(오픈 소스) 드라이버가 종종 많은 권한을 갖는 마이크로소프트 윈도우[23]와 같은 폐쇄형 OS의 경우에는 더욱 그렇다.[24][25][26][27][28]

일부 보안 연구 그룹은 격리 부족을 커널 보안을 저해하는 주요 요인 중 하나로 여기고,[29] 연간 약 80,000개의 커밋 (버전 관리)이 이루어진다고 언급한 주로 모놀리식 커널리눅스 커널을 보호하기 위한 샌드박스 (컴퓨터 보안) 프레임워크를 발표했다.[30][31]

12. 장치 드라이버 관련 API 및 규격

현대의 다양한 하드웨어와 운영 체제는 여러 방법으로 드라이버를 사용한다. 드라이버는 프린터, 비디오 어댑터, 네트워크 카드, 사운드 카드 등 다양한 장치와 인터페이스를 사용한다. 또한, 하드 디스크, CD-ROM과 같은 컴퓨터 저장 장치이미지 스캐너, 디지털 카메라 등과도 상호 작용한다.

장치 드라이버는 하드웨어와 직접 상호 작용하거나, 높은 수준의 인터페이스(예: 비디오 바이오스)를 사용하기도 한다. 소프트웨어 측면에서는 운영 체제가 하드웨어 자원에 직접 접근하거나, 드라이버가 아닌 소프트웨어를 위한 인터페이스(예: 트웨인)를 추가하기도 한다.

주어진 하드웨어에 올바른 장치 드라이버를 선택하고 설치하는 것은 컴퓨터 시스템 구성에 매우 중요하다. 다음은 장치 드라이버와 관련된 주요 API 및 규격들이다.


  • 윈도우 디스플레이 드라이버 모델(WDDM): 윈도우 비스타 이후의 그래픽 디스플레이 드라이버 아키텍처이다.
  • 통합 오디오 모델(UAM)[14]
  • 윈도우 드라이버 재단(WDF)
  • 선언적 컴포넌트 하드웨어(DCH): 유니버설 윈도우 플랫폼 드라이버[15]
  • 윈도우 드라이버 모델(WDM)
  • 네트워크 드라이버 인터페이스 규격(NDIS): 표준 네트워크 카드 드라이버 API이다.
  • 어드밴스드 리눅스 사운드 아키텍처(ALSA): 표준 리눅스 사운드 드라이버 인터페이스이다.
  • 스캐너 접근 용이(SANE): 래스터 이미지 스캐너 하드웨어에 대한 퍼블릭 도메인 인터페이스이다.
  • 설치 가능한 파일 시스템(IFS): IBM OS/2 및 Microsoft Windows NT용 파일 시스템 API이다.
  • 오픈 데이터 링크 인터페이스(ODI): NDIS와 유사한 네트워크 카드 API이다.
  • 통합 드라이버 인터페이스(UDI): 크로스 플랫폼 드라이버 인터페이스 프로젝트이다.
  • 다이나스 드라이버 프레임워크(dxd): KMDF 및 IOKit용 C++ 오픈 소스 크로스 플랫폼 드라이버 프레임워크이다.[16]

12. 1. Windows

마이크로소프트는 잘 쓰이지 않는 장치 드라이버로 인한 시스템 불안을 줄이기 위해 윈도우 드라이버 파운데이션(WDF)이라는 새로운 드라이버 개발 프레임워크를 만들었다. WDF에는 사용자 모드 드라이버 프레임워크(UMDF)가 포함되어 있는데, 이는 특정 드라이버, 주로 사용자 모드 드라이버로서 장치와 통신하기 위한 메시지 기반 프로토콜을 추가하는 드라이버 개발을 지원한다. 이러한 드라이버가 기능을 잘못 사용하더라도 시스템은 불안정해지지 않는다. 커널 모드 드라이버 프레임워크(KMDF) 모델 덕분에 커널 모드 장치 드라이버를 계속 개발할 수 있지만, 입출력 기능, 전원 관리, 플러그 앤 플레이 장치 지원의 취소와 같이 문제를 일으킨다고 알려진 기능들이 표준으로 제공될 수 있다.[45]

Windows 드라이버에는 다음과 같은 종류가 있다.

  • Windows Drivers: 모든 Windows 10 플랫폼에서 작동하는 엄격한 규격이다.[43]
  • Windows Desktop Drivers: 데스크톱 버전에서만 작동하는 규격이다.
  • 유니버셜 Windows 드라이버(UWD): Windows Drivers로 이전되었다.[44]


드라이버 규격은 다음과 같다.

  • 윈도우 드라이버 모델(WDM): Windows용 드라이버의 표준 인터페이스이다.
  • Windows Driver Frameworks(WDF): WDM을 래핑 및 추상화하여 단순하고 고기능으로 만든 공식 라이브러리 프레임워크이다.
  • Kernel-Mode Driver Framework(KMDF)
  • User-Mode Driver Framework(UMDF)
  • 가상 장치 드라이버(VxD): 과거에 사용되던 형식 (Windows 9x 등)이다.
  • Windows NT 드라이버 모델: Windows NT에서 주로 사용되던 형식이다.[46]
  • 윈도우 디스플레이 드라이버 모델(WDDM): Windows Vista에서의 그래픽 드라이버 아키텍처이다.

12. 2. Linux


  • 네트워크 드라이버 인터페이스 규격(NDIS)은 표준 네트워크 카드 드라이버 API이다.[16]
  • 어드밴스드 리눅스 사운드 아키텍처(ALSA)는 표준 리눅스 사운드 드라이버 인터페이스이다.[16]
  • SANE는 이미지 스캐너용 퍼블릭 도메인 인터페이스이다.[16]

12. 3. macOS

애플의 맥 오에스 텐에서 작동하는 오픈 소스 프레임워크인 I/O Kit가 있다.

12. 4. 기타


  • 오픈 데이터 링크 인터페이스(ODI)는 NDIS와 유사한 네트워크 카드 API이다.
  • 통합 드라이버 인터페이스(UDI)는 크로스 플랫폼 드라이버 인터페이스 프로젝트이다.
  • 다이나스 드라이버 프레임워크(dxd)는 KMDF 및 IOKit용 C++ 오픈 소스 크로스 플랫폼 드라이버 프레임워크이다.[16]
  • 설치 가능한 파일 시스템(IFS)은 IBM OS/2 및 Microsoft Windows NT용 파일 시스템 API이다.

참조

[1] 웹사이트 What is all device driver? http://searchenterpr[...] TechTarget 2018-03-19
[2] 서적 Information Storage and Management: Storing, Managing, and Protecting Digital Information https://books.google[...] John Wiley & Sons 2020-11-10
[3] 서적 Writing device drivers: tutorial and reference https://books.google[...] Digital Press 2016-08-05
[4] 웹사이트 MAKEDEV — Linux Command — Unix Command http://linux.about.c[...] Linux.about.com 2009-09-11
[5] 서적 Operating Systems, Design and Implementation Pearson Pretence Hall 2006
[6] 서적 Windows Internals, Part 1 Microsoft Press 2017
[7] 웹사이트 Introduction to the User-Mode Driver Framework (UMDF) http://blogs.msdn.co[...] Microsoft 2006-10-10
[8] 서적 Understanding Computers 2009: Today and Tomorrow https://books.google[...] Cengage Learning 2020-11-10
[9] 서적 Computer Peripherals and Interfaces https://books.google[...] Technical Publications Pune 2008-01
[10] 웹사이트 What are Device Drivers and why do we need them? http://www.drivers.c[...] 2015-04-17
[11] 웹사이트 CCISS http://sourceforge.n[...]
[12] 서적 Abbreviations and acronyms http://www.redbooks.[...] IBM International Technical Support Organization 2003-10-21
[13] 웹사이트 US Patent 5969841 - Gigabaud link module with received power detect signal http://www.patentsto[...] PatentStorm LLC
[14] 웹사이트 Unified Audio Model (Windows CE 5.0) https://msdn.microso[...]
[15] 웹사이트 What are DCH drivers and why do you need to know about them? {{!}} Dell US https://www.dell.com[...]
[16] 웹사이트 dxd - dynax driver framework: Main Page https://dxd.dynax.at[...]
[17] 서적 Charm: Facilitating Dynamic Analysis of Device Drivers of Mobile Systems https://www.usenix.o[...] 2018
[18] 뉴스 How a Microsoft blunder opened millions of PCs to potent malware attacks https://arstechnica.[...] 2022-10-14
[19] 뉴스 You're going to want to update your Wi-Fi and Bluetooth drivers today https://www.pcgamer.[...] 2022-02-09
[20] 뉴스 Wireless 'BlueBorne' Attacks Target Billions of Bluetooth Devices https://threatpost.c[...]
[21] 뉴스 Installing gaming drivers might leave your PC vulnerable to cyberattacks https://www.techrada[...] 2022-01-12
[22] 뉴스 HP patches vulnerable driver lurking in printers for 16 years https://www.zdnet.co[...]
[23] 서적 Digtool: A {Virtualization-Based} Framework for Detecting Kernel Vulnerabilities https://www.usenix.o[...] 2017
[24] 뉴스 Closed Source vs. Open Source Hardware Drivers: Why It Matters https://www.makeuseo[...] 2022-06-18
[25] 뉴스 How Microsoft blocks vulnerable and malicious drivers in Defender, third-party security tools and in Windows 11 https://www.techrepu[...] 2022-04-07
[26] 뉴스 No fix in sight for mile-wide loophole plaguing a key Windows defense for years https://arstechnica.[...] 2022-10-05
[27] 뉴스 "Bring Your Own Vulnerable Driver" Attacks Are Breaking Windows https://www.howtogee[...]
[28] 뉴스 Windows 10 Security Alert: Vulnerabilities Found in Over 40 Drivers https://www.bleeping[...]
[29] 웹사이트 Fine-grained kernel isolation https://mars-researc[...]
[30] 뉴스 Automatic device driver isolation protects against bugs in operating systems https://techxplore.c[...]
[31] 웹사이트 KSplit: Automating Device Driver Isolation https://mars-researc[...] 2022
[32] 문서 Microsoft はUniversal Printをドライバレスと言っている https://news.mynavi.[...]
[33] 문서 印刷タスクの進行状況、紙切れやインク量の状態が読める、という実装もあり得る。
[34] 문서 A Microsoft-provided class driver is an intermediate driver designed to provide a simple interface between a vendor-written minidriver and the operating system. https://docs.microso[...]
[35] 문서 The different technology-specific driver models use a variety of names for the specific and general pieces of a driver pair. ... Here are some of ... pairs ... audio miniport driver, audio port driver ... battery miniclass driver, battery class driver https://docs.microso[...]
[36] 웹사이트 PrimeCell UART (PL011) Technical Reference Manual http://infocenter.ar[...] ARM 2012-10-03
[37] 웹사이트 MAKEDEV — Linux Command — Unix Command http://linux.about.c[...] Linux.about.com 2009-09-11
[38] 웹사이트 User-mode vs. Kernel-mode Drivers http://technet.micro[...] マイクロソフト 2008-03-04
[39] 웹사이트 Introduction to the User-Mode Driver Framework (UMDF) http://blogs.msdn.co[...] マイクロソフト 2008-03-04
[40] 웹사이트 CCISS http://sourceforge.n[...] 2010-08-11
[41] 웹사이트 Open Source Zone - AMD http://developer.amd[...]
[42] 웹사이트 Intel® Graphics for Linux* | 01.org https://01.org/linux[...]
[43] 문서 Windows Drivers will run on all Window 10 variants https://docs.microso[...] Windows Hardware Developers
[44] 문서 Windows Universal Drivers https://blogs.window[...] Windows Blogs
[45] 문서 The Windows Driver classification will extend and replace the current Universal Driver classification. https://docs.microso[...] Windows Hardware Developers
[46] 문서 For a software driver, your two options are KMDF and the legacy Windows NT driver model. https://docs.microso[...] Windows Hardware Developer
[47] 서적 Information Storage and Management: Storing, Managing, and Protecting Digital Information https://books.google[...] John Wiley & Sons 2020-11-10

관련 사건 타임라인

( 최근 20개의 뉴스만 표기 됩니다. )



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com